// 引入axios
import axios from 'axios'
import { Message } from 'element-ui'
import conmom from './commom'
import { getToken } from '../utils/cookie'
import Router from '@/router/index'
axios.defaults.baseURL = conmom.apihost // 请求HTTP地址
axios.defaults.withCredentials = true // 请求不改变session
// 自定义请求头
axios.interceptors.request.use(
  config => {
    var token = getToken()
    if (token != null) {
      config.headers['Authorization'] = token
    }
    return config
  },
  err => {
    return Promise.reject(err)
  })

// 响应拦截器即异常处理
axios.interceptors.response.use(response => {
  if (response && response.data && response.data.code === 2006) {
    Router.push('/login')
  }
  if (response && response.data && response.data.code === 2008) {
    Router.push('/login')
  }
  return response
}, err => {
  if (err && err.response) {
    switch (err.response.status) {
      case 400:
        err.message = '错误请求'
        break
      case 401:
        err.message = '未授权，请重新登录'
        break
      case 403:
        err.message = '拒绝访问'
        break
      case 404:
        err.message = '请求错误,未找到该资源'
        break
      case 405:
        err.message = '请求方法未允许'
        break
      case 408:
        err.message = '请求超时'
        break
      case 500:
        err.message = '服务器端出错'
        break
      case 501:
        err.message = '网络未实现'
        break
      case 502:
        err.message = '网络错误'
        break
      case 503:
        err.message = '服务不可用'
        break
      case 504:
        err.message = '网络超时'
        break
      case 505:
        err.message = 'http版本不支持该请求'
        break
      default:
        err.message = `连接错误${err.response.status}`
    }
  } else {
    err.message = '请求错误'
  }
  Message({
    message: err.message,
    type: 'error',
    duration: '3000'
  })
  return Promise.resolve(err.response)
})

export default {
  // get请求
  get(url, param) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'get',
        url,
        data: param
      }).then(res => {
        if (res && res.data && res.data.code === 200) {
          resolve(res.data)
        } else {
          Message({
            message: res.data.message,
            type: 'error',
            duration: '3000'
          })
          reject(res)
        }
      })
    })
  },
  // post请求
  post(url, param) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'post',
        url,
        data: param
      }).then(res => {
        if (res && res.data && res.data.code === 200) {
          resolve(res.data)
        } else {
          Message({
            message: res.data.message,
            type: 'error',
            duration: '3000'
          })
          reject(res)
        }
      })
    })
  },
  // put请求
  put(url, param) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'put',
        url,
        data: param
      }).then(res => {
        if (res && res.data && res.data.code === 200) {
          resolve(res.data)
        } else {
          Message({
            message: res.data.message,
            type: 'error',
            duration: '3000'
          })
          reject(res)
        }
      })
    })
  },
  // delete请求
  delete(url, param) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'delete',
        url,
        data: param
      }).then(res => {
        if (res && res.data && res.data.code === 200) {
          resolve(res.data)
        } else {
          Message({
            message: res.data.message,
            type: 'error',
            duration: '3000'
          })
          reject(res)
        }
      })
    })
  }
}
